package cn.smart.util;

import cn.smart.pojo.GardenInfo;

import java.util.*;

/**
 * @author Xiezh
 * @Description:硬件设备返回数据的标准格式
 * @create 2017/7/30
 */
public class HardWareResult {
    private String flag;//硬件数据读取标识
    private String flag2;//副标题
    private String date;//硬件设备数据

    private String splitFlag = "|";


    public HardWareResult(String flag, String date) {
        this.flag = flag;
        this.date = date;
    }

    public HardWareResult(String flag,String flag2, GardenInfo gardenInfo) {
        //最终的数据
        StringBuilder sb = new StringBuilder();
        //设置第一标识位
        this.flag = flag;
        //设置第二标识位 在返回服务器上花园的配置时，需要传入第二标识位
        this.flag2 = flag2;
        sb.append("a="+Integer.toHexString(gardenInfo.getOp())+splitFlag);//op位
        sb.append("b="+Integer.toHexString(gardenInfo.getMode())+splitFlag);//模式
        sb.append("c="+Integer.toHexString(gardenInfo.getAtrTemperature())+splitFlag);//空气温度阈值;
        sb.append("d="+Integer.toHexString(gardenInfo.getAirHumidity())+splitFlag);//空气湿度阈值
        sb.append("e="+Integer.toHexString(gardenInfo.getDropTimeCell())+splitFlag);//滴灌的时间间隔
        sb.append("f="+Integer.toHexString(gardenInfo.getSprayTimeCell())+splitFlag);//喷雾的时间间隔
        sb.append("g="+Integer.toHexString(gardenInfo.getDropTimeSpan())+splitFlag);//滴灌一次的时间
        sb.append("h="+Integer.toHexString(gardenInfo.getSprayTimeSpan())+splitFlag);//喷雾一次的时间
        sb.append("i=");//土壤干度
        //存储土壤干度
        StringBuilder sall = new StringBuilder();
        for(int data : gardenInfo.getSoilDryness()){
            StringBuilder s = new StringBuilder();
            s.append(Integer.toHexString(data) + "");
            //硬件端每次要读3位 不满3位补0
            if(s.length()<3){
                int i = 3-s.length();
                for(;i>0;i--){
                    s.insert(0,"0");
                }
                sall.append(s.toString()+splitFlag);
            }

        }
        //去除最后一个'|'
        sall.deleteCharAt(sall.length()-1);
        sb.append(sall);
        this.date = sb.toString();
    }
    //获取返回给硬件的标准格式
    public String getResult(){
        //判断是否有副标题
        if(flag2!=null) return flag+" "+flag2+date;
        else return flag+" "+date;
    }

    public String getFlag() {
        return flag;
    }

    public void setFlag(String flag) {
        this.flag = flag;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }
}
